package com.thread.threadfirst.studyThread1;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 12、注意：在涉及到一些简单的运算，如++、--时，java5提供了一些原子类：AtomicXXX类
 * AtomicXXX类本身的方法都是原子性的，但不能保证多个方法连续调用是原子性的
 */
public class T4 {
    //AtomicInteger：原子性操作的int类型
    AtomicInteger count = new AtomicInteger(0);

    /*synchronized*/ void m() {
        for (int i = 0; i < 10000; i++) {
            count.incrementAndGet();   //替代count++，incrementAndGet()此方法是原子方法，是用系统相当底层的方法实现的，所以效率要比synchronized高好多
        }
    }

    public static void main(String[] args) {
        T4 t4 = new T4();

        List<Thread> threads = new ArrayList();
        for (int j = 0; j < 10; j++) {
            threads.add(new Thread(t4::m, "t_" + j));
        }
        threads.forEach(x -> x.start());
        threads.forEach(x -> {
            try {
                x.join();       //这里的x.join()的作用是：等待所有子线程执行完后，再执行到下面的输出count，如果不加，子线程还未全部执行完就输出count了
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        System.out.println(t4.count);
    }
}
